import greenfoot.*;  // (World, Actor, GreenfootImage, Greenfoot and MouseInfo)

/**
 * Clase de bloque mueve
 * 
 * @author morales ibarra ivan israel 
 */
public class Mmueve extends Obstaculo
{
    private int limX;
    private int limY;
    private int rand;
    private int tamanch;
    private int tamalt;
    private GreenfootImage mov;
    private GreenfootImage def;
    
    /**
     *Constructor de la clase Mueve
     */
    public Mmueve()
    {
       limX=0;
       limY=0;
        mov=new GreenfootImage("Red1.png");
        def=new GreenfootImage("Ama1.png");
    }

    /**
     * inicia los limites del siguiente movimiento
     */
    public void iniciaLimites()
    {
        limX=getX();
        limY=getY();
    }

    
    /**
     * actua en el escenario
     */
    public void act() 
    {     
        if(limX==0&&limY==0)
            iniciaLimites();
        
         super.iniciaTimer();
        if( super.dameCrono()>=6000)
        {
            rand=Greenfoot.getRandomNumber(4);
            if(!checaObstaculo(rand,20)) 
            {
                 defLimites(rand);
            }    
            super.actualizaCrono();
        }
           mueve(rand);      
           
           
    }   
    
    /**
     * cambia de posicion en el escenario
     *
     * @param  dir siguiente direccion
     */
    public void mueve(int dir)
    {
        if(dir==DER)
        {            
             if(limX!=getX())
             {            
                 setLocation(getX()+1,getY());  
                 setImage(mov);
                 checaObj();
             }
             else
               setImage(def);             
        }
        
        if(dir==IZQ)
       {      
            if(limX!=getX())
            {
                 setLocation(getX()-1,getY());
                 setImage(mov);
                 checaObj();
            }
              else
                setImage(def);
       }
       
       if(dir==UP)
       {      
             if(limY!=getY())
             {
                 setLocation(getX(),getY()-1);  
                 setImage(mov);
                 checaObj();
            }
            else
              setImage(def);
       }
      
       if(dir==DOWN )
       {      
             if(limY!=getY())
             {
                 setLocation(getX(),getY()+1);  
                 setImage(mov);
                 checaObj();
             }
             else
                  setImage(def);
       }

    }
    
    /**
     * define los limites del siguiente moviemiento
     *
     * @param dir direccion del siguiente moviemiento
     */
    public void defLimites(int dir)
    {
       if(dir==DER)
       {      
         limX=(this.getImage().getWidth())+getX();
         limY=getY();
       }
       
       if(dir==IZQ)
       {      
        limX=getX()-(this.getImage().getWidth());
        limY=getY();
       }
       
       if(dir==UP)
       {      
        limX=getX();
        limY=getY()-(this.getImage().getHeight());
       }
       
       if(dir==DOWN)
       {      
        limX=getX();
        limY=getY()+(this.getImage().getHeight());
       }
    }
    
    /**
     * checa el objeto durante el moviemiento
     */
    public void checaObj()
    {
         Actor auxD=getOneIntersectingObject(null);        
        if(auxD!=null)
        {
           Plataforma world=(Plataforma)getWorld();
           if(auxD instanceof Enemigo)
           ((Enemigo)auxD).iniciaPos();
           
           
           if(auxD instanceof Jugador)
           {
               (world.dameVidas()).decrementaContador();
               (world.dameJugador()).iniciaPos();
            }
           
        }  
    }

    
}
